package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.logging.Filter;

/**
 *   listFiles(接口：Filter)   重载
 *   作用：按照“指定规则”获取对应文件/文件夹
 *
 *   Filter接口---专门给listFiles方法提供：过滤文件夹或者文件【指定规则】
 *   accept()从每个File的文件中判断，拿到【具体逻辑】的文件夹
 *
 * 需求：获取  API  项目下  所有子项【文件和文件夹】 获取src文件
 *           指定规则：验证时s开头就是src
 * 作业2：FileFilter接口按照 匿名内部类 方式 实现，功能如上需求！
 *  接口：FileFilter  ff=new FileFilter() { accept() }
 */
public class FilterAPI {
    public static void main(String[] args) throws IOException{
        //1.创建File文件类： 获取当前API 文件夹  路径：./API
        File file = new File("." + File.separator+"API");
        System.out.println(file.getAbsolutePath());
        //匿名内部类：替换子类继承FileFilter
        /*FileFilter my=new MyFilter(){
            public boolean accept(File pathname){
                String name=pathname.getName();  //文件夹：src
                System.out.println("过滤出来文件夹名字是："+name);
                return name.startsWith("A");
            }
        };*/

        //2.获取文件夹下的所有"子项：文件夹下包括所有文件和文件夹"
        File[] subs=new File("." + File.separator+"API").listFiles((pathname)->{return pathname.toPath().startsWith("s");});
        //3.打印子项下的所有名字   增强for
        /*for(int i=0;i< subs.length;i++){ //i 下标  从0开始
            System.out.println("所有的文件和文件夹名："+subs[i].getName());
        }*/
        //增强for for(接受类型 f：){}
        for(File f:subs){
            System.out.println("遍历后过滤完成："+f);
        }
    }










    //单元测试：./ 路径指定父级
    /*@Test
    public void test01() throws IOException {
        //创建File文件类：获取当前API文件夹 路径./
        File file = new File("." + File.separator);
        System.out.println(file.getCanonicalPath());
    }*/
}
//创建实现类---实现---FileFilter接口---对象创建
class MyFilter implements FileFilter {
    ///accept(File pathname)
    //传入参数：File pathname--获取所有需要过滤的文件
    //作用：添加过滤条件，将获取所有需要过滤文件，
    //      逐一过滤，【条件：规则--开发者指定】条件
    //      满足返回true，输出，条件不满足反之
    public boolean accept(File pathname) {
        //添加规则：文件或者文件夹是 s 开头 -- 过滤
        //①获取所有的文件夹名字
        String name=pathname.getName(); // 文件夹： src  字符串
        //②过滤以 s 开头的文件夹
        // 字符串：startWith("s") 返回值boolean
        //  作用：验证字符串首字符是不是匹配字符，如果匹配：true，反之不匹配
        //③打印过滤出现字符串
        System.out.println("过滤出来文件夹名字是："+name);
        return name.startsWith("s");

    }
}